/**
 * @author Created by qiush on 2017-05-27.
 */

interface IArray extends Array<any> {
  [index: number]: any;
}

export default {

  /**
   * 往数组添加新的元素
   * @param arr 要添加元素的数组
   * @param value 新的元素
   * @returns {T}
   */
  add<T extends IArray>(arr: T, value: any): T {
    return arr.concat(value) as T;
  },

  /**
   * 更新数组中指定位置的值
   * @param arr 要更新的数组
   * @param index 要更新的位置
   * @param value 新的值
   * @returns {T}
   */
  set<T extends IArray>(arr: T, index: number, value: any): T {
    // 重新创建一个数组
    const newArr = [...arr] as T;
    // 更新指定的值
    newArr[index] = value;
    return newArr;
  },

  /**
   * 删除数组中指定位置的元素
   * @param arr 要删除元素的数组
   * @param index 要删除的位置
   * @returns {T}
   */
  remove<T extends IArray>(arr: T, index: number): T {
    // 重新创建一个数组
    const newArr = [...arr] as T;
    // 删除指定的元素
    newArr.splice(index, 1);
    return newArr;
  }
};
